56. 合并区间

56. 合并区间

第一版

import (
	"slices"
)

func merge(intervals [][]int) [][]int {
    // 根据数组的第一个元素进行排序
    slices.SortFunc(intervals, func(a, b []int) int {
        if a[0] < b[0] {
            return -1
        } else if a[0] == b[0] {
            return 0
        } else {
            return 1
        }
    })


    // 依次合并每一个元素
    ret := [][]int{}

    item := intervals[0]
    for i:=1;i<len(intervals);i++ {
        if item[1] < intervals[i][0] {
            ret = append(ret, item)
            item = intervals[i]
        } else {
            item[1] = max(intervals[i][1], item[1])
        }
    }

    ret = append(ret, item)
    return ret
}

优化的点

import (
	"slices"
)
func merge(intervals [][]int) [][]int {
    // 根据数组的第一个元素进行排序
    slices.SortFunc(intervals, func(a, b []int) int {
        return a[0]-b[0]
    })


    // 递归合并每一个元素
    ret := [][]int{intervals[0]}
    for i:=1;i<len(intervals);i++ {
        if ret[len(ret)-1][1] < intervals[i][0] {
            // 无法合并
            ret = append(ret, intervals[i])
        } else {
            // 可以合并
            ret[len(ret)-1][1] = max(intervals[i][1], ret[len(ret)-1][1])
        }
    }

    return ret
}

Pasted image 20241024235857.png

经过优化之后,虽然代码执行用时没有太大的变化,但是更简洁更精炼了,而且减少了一个临时变量的使用


本站总访问量次 本站访客数人次 本文总阅读量